// 手写 new 操作符

function MyNew(fn, ...args) {
    // 1、 创建一个空对像、
    const obj = {}

    // 2、 将空对像的 __proto__ 指向构造函数的显示原型
    obj.__proto__ = fn.prototype

    // 3、 改变 this 指向， 执行代码
    const res = fn.apply(obj, args)
    // 4、 判断类型， 如果是引用类型， 那么就返回这个引用类型， 否则返回 obj
    const isObj = typeof res === 'object' && res !== null
    const isFunc = typeof res === 'function'
    return isObj || isFunc ? res : obj
}
